package com.cskaoyan.javase.array._1basic._1initialization;

/**
 * 数组的初始化
 * 类比变量的初始化,变量的初始化实际上就是一个赋值的过程
 * 数组的初始化也类似,需要开辟内存空间,开辟存储单元,然后给每个存储单元赋值
 * 这就意味着数组的初始化需要两个条件:
 *      1.数组的长度
 *      2.数组当中每个存储单元都必须有值
 *
 * 数组初始化的两种格式:
 *      1.静态初始化,指的是直接告诉数组中每个元素的具体取值,数组的长度间接给出.
 *      语法:
 *      数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3....};
 *      静态初始化有简写的形式:
 *      数据类型[] 数组名 = {元素1,元素2...};
 *      注意: 简写形式必须和数组的声明写在一起,不能用来给来给数组赋值.
 *
 *      2.动态初始化,指的是直接告诉数组的长度,但是不明确数组元素的取值.
 *      语法:
 *      数据类型[] 数组名 = new 数据类型[数组长度];
 *      数组的动态初始化仅说明数组的长度
 *      数组中元素的取值依赖于默认值,这个默认值是由JVM创建数组时给出的.
 *
 *      以上就是数组的两种初始化方式,切记(一维)数组没有第三种初始化方式,尤其是经典错误:"动静结合"
 *
 *
 *      数组的总结:
 *      数组是存储多个单一数据类型元素,的有序容器
 *      优点是: 随机访问,存取都很快
 *      缺点是: 内存要求必须连续,导致数组的长度一旦缺点,就不可变了.
 *      所以这要求我们在使用数组时，必须严格考量数组的长度，如果长度过长就导致空间浪费，过短又不够用。
 *
 *      数组在实际开发中是很见直接使用的,因为它不好用.
 *      在集合当中,存在一个类叫ArrayList,它的底层实现就是数组,有下标,支持随机访问,同时还能自动扩容,所以日常开发中ArrayList会完美替代数组.
 *
 *
 * @since 17:16
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 静态初始化一个长度为0的int数组,不能存放任何元素
        int[] arr = new int[]{};

        // 静态初始化一个长度为3,元素取值分别为1,2,3的一个int数组
        int[] arr2 = new int[]{1, 2, 3};

        // 静态初始化的简写形式
        String[] arr3 = {"123", "789", "666"};

        // arr3 = {""};
        arr3 = new String[]{"777"};


        // 动态初始化一个长度为5的double类型数组
        double[] arr4 = new double[5];

        // 经典错误:"动静结合"
        // int[] arr5 = new int[3]{1,2,3};
    }
}
